/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package View;

import Dao.AlunoDao;
import Dao.AlunoDaoImplJPA;
import Dao.AtividadeDao;
import Dao.AtividadeDaoImplJPA;
import Dao.DisciplinaDao;
import Dao.DisciplinaDaoImplJPA;
import Dao.HistoricoDao;
import Dao.HistoricoDaoImplJPA;
import Dao.HistoricoTurmaDao;
import Dao.HistoricoTurmaDaoImplJPA;
import Dao.NotaDao;
import Dao.NotaDaoImplJPA;
import Dao.TurmaDao;
import Dao.TurmaDaoImplJPA;
import Pojo.Aluno;
import Pojo.Atividade;
import Pojo.Disciplina;
import Pojo.Historico;
import Pojo.HistoricoTurma;
import Pojo.Nota;
import Pojo.Professor;
import Pojo.Turma;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author thiago
 */
public class FormFecharTurmas extends javax.swing.JInternalFrame {

    /**
     * Acesso necessário para o caso de chamar o cadastro de professore
     */
    private int acesso;
    
    /** 
     * String de modificação. N=novo, A=alteração
     */
    private String modificacao;
    
    /**
     * Objeto professor para acesso.
     */
    private Professor professorAcesso;
    
    /** Turma atual*/
    private Turma turmaAtual;

    public int getAcesso() {
        return acesso;
    }

    private void setAcesso(int acesso) {
        this.acesso = acesso;
    }

    public String getModificacao() {
        return modificacao;
    }

    private void setModificacao(String modificacao) {
        this.modificacao = modificacao;
    }

    public Professor getProfessorAcesso() {
        return professorAcesso;
    }

    private void setProfessorAcesso(Professor professorAcesso) {
        this.professorAcesso = professorAcesso;
    }

    public Turma getTurmaAtual() {
        return turmaAtual;
    }

    private void setTurmaAtual(Turma turmaAtual) {
        this.turmaAtual = turmaAtual;
    }
    
    /**
     * Creates new form FormFecharTurmas
     */
    public FormFecharTurmas(int acesso, Professor professor) {
        initComponents();
        this.setAcesso(acesso);
        this.setProfessorAcesso(professor);
        this.buscarTurmasProfessor();
    }
    
    private void buscarTurmasProfessor(){
        TurmaDao turmaDao = new TurmaDaoImplJPA();
        List<Turma> listaTurmas = turmaDao.pesquisarPorProfessor(this.getProfessorAcesso());
        
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        cbbTurmasAbertas.setModel(model);
        
        for(Turma turma : listaTurmas){
            if (turma.getFinalizada()==false){
                cbbTurmasAbertas.addItem(turma.getId()+" - "+turma.getDisciplina().getNome()+" - "+turma.getAno()+" - "+turma.getPeriodo());
            }
        }
    }
    
    private void carregarDadosCampos(){
        //Setando valores da turma nos campos principais.
        txtCodigo.setText(String.valueOf(this.getTurmaAtual().getId()));
        txtAno.setText(String.valueOf(this.getTurmaAtual().getAno()));
        txtPeriodo.setText(String.valueOf(this.getTurmaAtual().getPeriodo()));
        txtDisciplina.setText(this.getTurmaAtual().getDisciplina().getNome());
        
        //Setando valores dos campos de quantidade de atividades e total de atividades
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        List<Atividade> listaAtividades = atividadeDao.pesquisarPorTurma(this.getTurmaAtual());
        txtQtdAtividades.setText(String.valueOf(listaAtividades.size()));
        double valorTotal = 0;
        for (Atividade atividade : listaAtividades){
            valorTotal += atividade.getValor();
        }
        txtValorTotal.setText(String.valueOf(valorTotal));
        
        //Verificando se todas as notas das atividades da turma foram lançadas corretamente.
        HistoricoTurmaDao historicoTurmaDao = new HistoricoTurmaDaoImplJPA();
        List<Aluno> listaAlunosInscritos =  historicoTurmaDao.pesquisarAlunosTurma(this.getTurmaAtual());
        NotaDao notaDao = new NotaDaoImplJPA();
        List<Atividade> listaAtividadesRestantes = new ArrayList<Atividade>();
        for (Atividade atividade: listaAtividades){
            for (Aluno aluno: listaAlunosInscritos){
                if (notaDao.verificarLancamento(aluno, atividade)==0){
                    listaAtividadesRestantes.add(atividade);
                    break;
                }
            }
        }
        
        //setando a situação da turma
        if (listaAtividadesRestantes.isEmpty()){
            lblSituacao.setText("Todas as notas foram lançadas.");
            lblSituacao.setForeground(Color.blue);
            btnFecharTurmas.setEnabled(true);
            btnLancarNotas.setEnabled(false);
        }else{
            lblSituacao.setText("Uma ou mais atividades tem notas não lançadas.");
            lblSituacao.setForeground(Color.red);
            btnFecharTurmas.setEnabled(false);
            btnLancarNotas.setEnabled(true);
        }
        
        //Colocando os dados na tabela de faltas de alunos
        DefaultTableModel model = (DefaultTableModel) tblAlunoFaltas.getModel();
        model.setRowCount(0);
        Object[] linha = new Object[3];
        for (Aluno aluno: listaAlunosInscritos){
            linha[0] = String.valueOf(aluno.getId());
            linha[1] = aluno.getNome();
            linha[2] = String.valueOf(historicoTurmaDao.pesquisarPorAlunoETurma(aluno, this.getTurmaAtual()).getNumeroDeFaltas());
            model.addRow(linha);
        }
        tblAlunoFaltas.repaint();
    }

    private void limparCampos(){
        txtCodigo.setText("");
        txtDisciplina.setText("");
        txtAno.setText("");
        txtPeriodo.setText("");
        txtQtdAtividades.setText("");
        txtValorTotal.setText("");
        lblSituacao.setText("");
        
        DefaultTableModel model = (DefaultTableModel) tblAlunoFaltas.getModel();
        model.setRowCount(0);
    }
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        cbbTurmasAbertas = new javax.swing.JComboBox();
        btnCarregarDados = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        txtCodigo = new javax.swing.JTextField();
        txtDisciplina = new javax.swing.JTextField();
        txtAno = new javax.swing.JTextField();
        txtPeriodo = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        txtQtdAtividades = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        txtValorTotal = new javax.swing.JTextField();
        jPanel3 = new javax.swing.JPanel();
        btnFecharTurmas = new javax.swing.JButton();
        btnLancarNotas = new javax.swing.JButton();
        jLabel8 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblAlunoFaltas = new javax.swing.JTable();
        lblSituacao = new javax.swing.JLabel();

        setClosable(true);
        setTitle("FecharTurmas");

        jLabel1.setText("Turmas");

        cbbTurmasAbertas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cbbTurmasAbertasActionPerformed(evt);
            }
        });

        btnCarregarDados.setText("Carregar Dados");
        btnCarregarDados.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCarregarDadosActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cbbTurmasAbertas, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addComponent(btnCarregarDados, javax.swing.GroupLayout.PREFERRED_SIZE, 146, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(cbbTurmasAbertas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnCarregarDados))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jLabel2.setText("Código");

        jLabel3.setText("Disciplina");

        jLabel4.setText("Ano");

        jLabel5.setText("Período");

        txtCodigo.setEnabled(false);

        txtDisciplina.setEnabled(false);

        txtAno.setEnabled(false);

        txtPeriodo.setEnabled(false);

        jLabel6.setText("Qtd. Atividades");

        txtQtdAtividades.setEnabled(false);

        jLabel7.setText("Valor Total");

        txtValorTotal.setEnabled(false);

        btnFecharTurmas.setText("Fechar Turma");
        btnFecharTurmas.setEnabled(false);
        btnFecharTurmas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnFecharTurmasActionPerformed(evt);
            }
        });

        btnLancarNotas.setText("Lançar Notas");
        btnLancarNotas.setEnabled(false);
        btnLancarNotas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLancarNotasActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(btnLancarNotas, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnFecharTurmas))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGap(6, 6, 6)
                .addComponent(btnFecharTurmas)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnLancarNotas)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jLabel8.setText("Situação");

        tblAlunoFaltas.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Código", "Aluno", "Total Faltas"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(tblAlunoFaltas);

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3)
                            .addComponent(jLabel4)
                            .addComponent(jLabel8))
                        .addGap(10, 10, 10)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(txtDisciplina, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(txtAno, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(12, 12, 12)
                                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel6)
                                    .addComponent(jLabel7)
                                    .addComponent(jLabel5))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                    .addComponent(txtValorTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(txtQtdAtividades, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(txtPeriodo, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addComponent(lblSituacao, javax.swing.GroupLayout.PREFERRED_SIZE, 450, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(0, 0, Short.MAX_VALUE))))
                    .addComponent(jScrollPane1))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel2)
                            .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txtPeriodo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel5))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel3)
                            .addComponent(txtDisciplina, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel6)
                            .addComponent(txtQtdAtividades, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel4)
                            .addComponent(txtAno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel7)
                            .addComponent(txtValorTotal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel8)
                        .addGap(0, 2, Short.MAX_VALUE))
                    .addComponent(lblSituacao, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 210, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void cbbTurmasAbertasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbbTurmasAbertasActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_cbbTurmasAbertasActionPerformed

    private void btnCarregarDadosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCarregarDadosActionPerformed
        String turmaString = (String) cbbTurmasAbertas.getSelectedItem();
        if (turmaString!=null){
            String[] dados = turmaString.split(" - ");
            TurmaDao turmaDao = new TurmaDaoImplJPA();
            Turma turma = turmaDao.pesquisarPorId(Integer.parseInt(dados[0]));
            this.setTurmaAtual(turma);
            this.carregarDadosCampos();
        }
    }//GEN-LAST:event_btnCarregarDadosActionPerformed

    private void btnFecharTurmasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFecharTurmasActionPerformed
        
        //Declarando os objetos Daos
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        AlunoDao alunoDao = new AlunoDaoImplJPA();
        NotaDao notaDao = new NotaDaoImplJPA();
        HistoricoTurmaDao historicoTurmaDao = new HistoricoTurmaDaoImplJPA();
        HistoricoDao historicoDao = new HistoricoDaoImplJPA();
        TurmaDao turmaDao = new TurmaDaoImplJPA();
        
        //Declarando os objetos do POJO
        Aluno aluno;
        List<Atividade> listaAtividades;
        Nota nota;
        HistoricoTurma historicoTurma;
        Historico historico;
        
        //Declarando outras variáveis
        int linha=0;
        int qtdFaltas;
        double valorNotaFinal;
        double valorNotaTotal = Double.parseDouble(txtValorTotal.getText());
        boolean aprovacao;
        
        //Buscando atividades
        listaAtividades = atividadeDao.pesquisarPorTurma(this.getTurmaAtual());
        
        //Percorrendo a tabela e verificando se todas as faltas foram lançadas
        while(linha<tblAlunoFaltas.getRowCount()){
            try{
                qtdFaltas = Integer.parseInt(tblAlunoFaltas.getValueAt(linha, 2).toString());
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, "Erro na linha "+linha+". Falta para o aluno "+tblAlunoFaltas.getValueAt(linha, 1).toString()+" não informada.");
                return;
            }
            linha++;
        }
        
        //Percorrendo a tabela
        linha=0;
        while(linha<tblAlunoFaltas.getRowCount()){
            
            //Buscando o aluno do banco de dados
            aluno = alunoDao.pesquisarPorId(Integer.parseInt(tblAlunoFaltas.getValueAt(linha, 0).toString()));
            
            //Calculando a nota final do aluno
            valorNotaFinal = 0;
            for (Atividade atividade: listaAtividades){
                nota = notaDao.pesquisarNota(aluno, atividade);
                valorNotaFinal += nota.getNota();
            }
            
            //Buscando a quantidade de faltas da tabela
            qtdFaltas = Integer.parseInt(tblAlunoFaltas.getValueAt(linha, 2).toString());
            
            //Gerando o objeto historicoTurma e atribuindo os atributos
            historicoTurma = historicoTurmaDao.pesquisarPorAlunoETurma(aluno, this.getTurmaAtual());
            historicoTurma.setNota(valorNotaFinal);
            historicoTurma.setNumeroDeFaltas(qtdFaltas);
            aprovacao = false;
            if ((valorNotaFinal >= (valorNotaTotal*0.6)) && (qtdFaltas <= (0.25*this.getTurmaAtual().getDisciplina().getCargaHoraria()))){
                aprovacao = true;
            }
            historicoTurma.setAprovado(aprovacao);
            
            //alterando o histórico da turma
            historicoTurmaDao.alterar(historicoTurma);
            
            //gerando o histórico
            if(historicoTurma.isAprovado()){
                historico = new Historico(valorNotaFinal, qtdFaltas, aluno, this.getTurmaAtual().getDisciplina());
                historicoDao.inserir(historico);
            }
            
            //incrementando o contador
            linha++;
        }
        
        //Finalizando a turma para não poder mais ser editada
        this.getTurmaAtual().setFinalizada(true);
        turmaDao.alterar(this.getTurmaAtual());
              
        //Mensagem de sucesso!
        JOptionPane.showMessageDialog(null, "Todos os históricos foram gerados e a turma foi fechada com sucesso.");
        
        //chamando a interface novamente;
        this.btnCarregarDadosActionPerformed(evt);
        this.buscarTurmasProfessor();
        this.limparCampos();
    }//GEN-LAST:event_btnFecharTurmasActionPerformed

    private void btnLancarNotasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLancarNotasActionPerformed
        FormLancarNotas formCadastroAlunos = new FormLancarNotas(this.getAcesso(), this.getProfessorAcesso(), this.getTurmaAtual());
        this.getParent().add(formCadastroAlunos);
        formCadastroAlunos.setVisible(true);       
    }//GEN-LAST:event_btnLancarNotasActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCarregarDados;
    private javax.swing.JButton btnFecharTurmas;
    private javax.swing.JButton btnLancarNotas;
    private javax.swing.JComboBox cbbTurmasAbertas;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblSituacao;
    private javax.swing.JTable tblAlunoFaltas;
    private javax.swing.JTextField txtAno;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextField txtDisciplina;
    private javax.swing.JTextField txtPeriodo;
    private javax.swing.JTextField txtQtdAtividades;
    private javax.swing.JTextField txtValorTotal;
    // End of variables declaration//GEN-END:variables
}

